package com.xebest.web.model.base;

import com.github.pagehelper.Page;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * 返回分页信息
 * 
 * @ClassName: XePageInfo
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author xebest
 * @date 2017年1月17日
 * 
 * @param <T>
 */

/**
 * 分页返回信息实体
 * @desc: xebest-product  
 * @author: 朱小成  
 * @createTime: 2017年6月12日 下午5:35:44  
 * @history:  
 * @version: v1.0  
 * @param <T>
 */
public class XePageInfo<T> implements Serializable {
	private static final long serialVersionUID = 1L;
	/**
	 * 当前页
	 */
	private int pageNum;
	/**
	 * 每页的数量
	 */
	private int pageSize;
	/**
	 * 当前页的数量
	 */
	private int size;
	/**
	 * 总记录数
	 */
	private long total;
    /**
     * 总页数	
     */
	private int pages;
	/**
	 * 当前页面第一个元素在数据库中的行号
	 */
	private int startRow;
	/**
	 * 当前页面最后一个元素在数据库中的行号
	 */
	private int endRow;

	public XePageInfo() {
	}

	/**
	 * 包装Page对象
	 *
	 * @param list
	 */
	public XePageInfo(List<T> list) {
		this(list, 8);
	}

	/**
	 * 包装Page对象
	 *
	 * @param list
	 *            page结果
	 * @param navigatePages
	 *            页码数量
	 */
	public XePageInfo(List<T> list, int navigatePages) {
		if (list instanceof Page) {
			Page<T> page = (Page<T>) list;
			this.pageNum = page.getPageNum();
			this.pageSize = page.getPageSize();

			this.pages = page.getPages();
			this.size = page.size();
			this.total = page.getTotal();
			// 由于结果是>startRow的，所以实际的需要+1
			if (this.size == 0) {
				this.startRow = 0;
				this.endRow = 0;
			} else {
				this.startRow = page.getStartRow() + 1;
				// 计算实际的endRow（最后一页的时候特殊）
				this.endRow = this.startRow - 1 + this.size;
			}
		} else if (list instanceof Collection) {
			this.pageNum = 1;
			this.pageSize = list.size();

			this.pages = 1;
			this.size = list.size();
			this.total = list.size();
			this.startRow = 0;
			this.endRow = list.size() > 0 ? list.size() - 1 : 0;
		}
	}

	public int getPageNum() {
		return pageNum;
	}

	public void setPageNum(int pageNum) {
		this.pageNum = pageNum;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getSize() {
		return size;
	}

	public void setSize(int size) {
		this.size = size;
	}

	public long getTotal() {
		return total;
	}

	public void setTotal(long total) {
		this.total = total;
	}

	public int getPages() {
		return pages;
	}

	public void setPages(int pages) {
		this.pages = pages;
	}

	public int getStartRow() {
		return startRow;
	}

	public void setStartRow(int startRow) {
		this.startRow = startRow;
	}

	public int getEndRow() {
		return endRow;
	}

	public void setEndRow(int endRow) {
		this.endRow = endRow;
	}

}
